package PenTest.Soluation10;

import java.util.*;


/*
       游游的水果礼包

       先找出 a 方案的最大值，

       从 0 到 a 遍历 a 方案，然后加上剩余的 b 方案

       得出的结果中找出最大值即可。

 */

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {

        // 输入
        Scanner in = new Scanner(System.in);

//             水果个数
            long apple = in.nextLong();
            long peach = in.nextLong();
           
//             不同方案的价值
            long  num1= in.nextLong();
            long  num2= in.nextLong(); 

            // 得到两种方案的结果
            long ret = 0; 

            // 对方案一处理
            long a1 = Math.min(apple/2, peach);

           
        // 一定要从 0 到 a1 的最大位置开始遍历
//          从而找出该总体的最大值
            for(int i=0 ; i<= a1; i++) {
                  long  result = (i *  num1);
                    long  a2 = Math.min(apple-(i*2) , (peach- i)/2 );
                    result +=  (a2 * num2);
                    ret = Math.max(ret,result);
                
            }
        
        
        

            // 输出
            System.out.println(ret);

    }
}



/*

   最大公约数 * 最小公倍数  =  两个数字的乘积

   求最大公约数 使用辗转相除法

 */


// 注意类名必须为 Main, 不要有任何 package xxx 信息
 class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别

        // 输入
        long num1 = in.nextLong();
        long num2 = in.nextLong();

        // 最大公约数 * 最小公倍数 =  num1 * num2

        long n1 = num1;
        long n2 = num2;

        // 寻找最大公约数
        long tmp = n1 % n2;
        while(tmp != 0) {
            n1 = n2;
            n2 = tmp;
            tmp = n1 % n2;
        }

        // 最终得到的 n2 为最大公约数

        System.out.println( (num1*num2) / n2);


    }
}



/*

 题目： 拼三角
 1. 六个数抽出两个三角形
 2. 先排序
 3. 按照两个小的> 大的 规律把所有的组合对应的下标写出来


 */


 class Main3{
    public static void main(String[] args) {
//         输入
        Scanner in = new Scanner(System.in);

        int t = in.nextInt();

        // 开始
        while(t-- != 0) {
//             输入数组
            int[] nums = new int[6];

            for(int i=0;i < 6;i++) {
                nums[i] = in.nextInt();
            }


            // 排序
            Arrays.sort(nums);

            // 判断
            if(nums[0] + nums[1] > nums[2] && nums[3] + nums[4] > nums[5] ||
                    nums[0] + nums[2] > nums[3] && nums[1] + nums[4] > nums[5] ||
                    nums[0] + nums[3] > nums[4] && nums[1] + nums[2] > nums[5] ||
                    nums[0] + nums[4] > nums[5] && nums[1] + nums[2] > nums[3] ||
                    nums[1] + nums[3] > nums[4] && nums[0] + nums[2] > nums[5]
            ) {
                System.out.println("Yes");

            } else {
                System.out.println("No");

            }



        }


    }
}



